﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace BLL
{
    public class Vagas
    {
        public class entVaga
        {
            private string idVaga;
            public string IdVaga
            {
                get { return idVaga; }
                set { idVaga = value; }
            }

            private int numeroVagas;
            public int NumeroVagas
            {
                get { return numeroVagas; }
                set { numeroVagas = value; }
            }

            private string cidade;
            public string Cidade
            {
                get { return cidade; }
                set { cidade = value; }
            }

            private string estado;
            public string Estado
            {
                get { return estado; }
                set { estado = value; }
            }

            private string pais;
            public string Pais
            {
                get { return pais; }
                set { pais = value; }
            }

            private int idFormacao;
            public int IdFormacao
            {
                get { return idFormacao; }
                set { idFormacao = value; }
            }

            private string descricao;
            public string Descricao
            {
                get { return descricao; }
                set { descricao = value; }
            }

            private string dtCadastro;
            public string DtCadastro
            {
                get { return dtCadastro; }
                set { dtCadastro = value; }
            }

            private string idUsuario;
            public string IdUsuario
            {
                get { return idUsuario; }
                set { idUsuario = value; }
            }

            private string status;
            public string Status
            {
                get { return status; }
                set { status = value; }
            }

            private string tituloVaga;
            public string TituloVaga
            {
                get { return tituloVaga; }
                set { tituloVaga = value; }
            }
        }

        public DataTable ListaVagas()
        {
            string procName = "stpVagas";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 2));

            DataTable dt = new DataTable();
            return dt = DAL.DAL.ExecSPWithReturn(parameter, procName);
        }

        public entVaga CarregaDetalhesDaVaga(int idVaga)
        {
            string procName = "stpVagas";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 6));
            parameter.Add(new SqlParameter("@IDVaga", idVaga));

            DataTable dt = new DataTable();
            dt = DAL.DAL.ExecSPWithReturn(parameter, procName);

            entVaga vaga = new entVaga();
            if (dt != null)
            {
                vaga.IdVaga = dt.Rows[0]["IDVaga"].ToString();
                vaga.NumeroVagas = Convert.ToInt32(dt.Rows[0]["NumeroVagas"].ToString());
                vaga.Cidade = dt.Rows[0]["Cidade"].ToString();
                vaga.Estado = dt.Rows[0]["Estado"].ToString();
                vaga.Pais = dt.Rows[0]["Pais"].ToString();
                vaga.IdFormacao = Convert.ToInt32(dt.Rows[0]["IDFormacao"].ToString());
                vaga.Descricao = dt.Rows[0]["Descricao"].ToString();
                vaga.TituloVaga = dt.Rows[0]["TituloVaga"].ToString();
                vaga.DtCadastro = dt.Rows[0]["dtCadastro"].ToString();
            }

            return vaga;
        }

        public void AtualizarDetalhesDaVaga(entVaga vaga)
        {
            try
            {
                string procName = "stpVagas";
                List<SqlParameter> parameter = new List<SqlParameter>();
                parameter.Add(new SqlParameter("@Operacao", 5));
                parameter.Add(new SqlParameter("@NumeroVagas", vaga.NumeroVagas));
                parameter.Add(new SqlParameter("@Cidade", vaga.Cidade));
                parameter.Add(new SqlParameter("@Estado", vaga.Estado));
                parameter.Add(new SqlParameter("@Pais", vaga.Pais));
                parameter.Add(new SqlParameter("@IDFormacao", vaga.IdFormacao));
                parameter.Add(new SqlParameter("@Descricao", vaga.Descricao));
                parameter.Add(new SqlParameter("@TituloVaga", vaga.TituloVaga));
                parameter.Add(new SqlParameter("@IDVaga", vaga.IdVaga));

                DAL.DAL.ExecSP(parameter, procName);
            }
            catch (Exception)
            {                
                throw;
            }            
        }

        public entVaga InserirDetalhesDaVaga(entVaga vaga)
        {
            try
            {
                string procName = "stpVagas";
                List<SqlParameter> parameter = new List<SqlParameter>();
                parameter.Add(new SqlParameter("@Operacao", 4));
                parameter.Add(new SqlParameter("@NumeroVagas", vaga.NumeroVagas));
                parameter.Add(new SqlParameter("@Cidade", vaga.Cidade));
                parameter.Add(new SqlParameter("@Estado", vaga.Estado));
                parameter.Add(new SqlParameter("@Pais", vaga.Pais));
                parameter.Add(new SqlParameter("@IDFormacao", vaga.IdFormacao));
                parameter.Add(new SqlParameter("@Descricao", vaga.Descricao));
                parameter.Add(new SqlParameter("@TituloVaga", vaga.TituloVaga));

                DataTable dt = new DataTable();

                dt = DAL.DAL.ExecSPWithReturn(parameter, procName);
                if (dt != null)
                    vaga.IdVaga = dt.Rows[0]["IDVaga"].ToString();

                return vaga;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public string VerificarStatusDaVaga(int idVaga)
        {
            string procName = "stpVagas";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 7));
            parameter.Add(new SqlParameter("@IDVaga", idVaga));

            DataTable dt = new DataTable();
            dt = DAL.DAL.ExecSPWithReturn(parameter, procName);
            if (dt != null)
                return dt.Rows[0]["Status"].ToString();

            return null;
        }

        public bool SuspenderVaga(int idVaga, string motivoSuspensao)
        {
            try
            {
                string procName = "stpVagas";
                List<SqlParameter> parameter = new List<SqlParameter>();
                parameter.Add(new SqlParameter("@Operacao", 8));
                parameter.Add(new SqlParameter("@IDVaga", idVaga));
                parameter.Add(new SqlParameter("@MotivoSuspensao", motivoSuspensao));

                DAL.DAL.ExecSP(parameter, procName);
                return true;
            }
            catch (Exception)
            {                
                throw;
            }            
        }

        public bool FinalizarVaga(int idVaga, string feedback)
        {
            try
            {
                string procName = "stpVagas";
                List<SqlParameter> parameter = new List<SqlParameter>();
                parameter.Add(new SqlParameter("@Operacao", 9));
                parameter.Add(new SqlParameter("@IDVaga", idVaga));
                parameter.Add(new SqlParameter("@Feedback", feedback));

                DAL.DAL.ExecSP(parameter, procName);
                return true;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public bool CancelarVaga(int idVaga, string motivoCancelamento)
        {
            try
            {
                string procName = "stpVagas";
                List<SqlParameter> parameter = new List<SqlParameter>();
                parameter.Add(new SqlParameter("@Operacao", 10));
                parameter.Add(new SqlParameter("@IDVaga", idVaga));
                parameter.Add(new SqlParameter("@MotivoCancelamento", motivoCancelamento));

                DAL.DAL.ExecSP(parameter, procName);
                return true;
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
